package com.module.launcher.utils

import cn.leancloud.push.PushService
import com.module.app.utils.InitializationUtils.Companion.initLearnCloudPush
import com.module.base.ext.cycleTiming
import com.module.base.utils.ServiceUtils
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job

val checkServiceUtils: CheckServiceUtils2 by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
    CheckServiceUtils2()
}

class CheckServiceUtils2 {

    private var job: Job? = null

    /**
     * 检查服务
     */
    fun check() {
        if (!com.module.app.utils.UserUtils.isLogin()) {
            return
        }
        destroy()
        job = cycleTiming(GlobalScope, 5000) {
            checkPushService()
        }
    }

    /**
     * 检查推送服务
     */
    private fun checkPushService() {
        if (!ServiceUtils.isServiceRunning(
                com.module.app.base.BaseApplication.getContext(),
                PushService::class.java.name
            )
        ) {
//            LogUtils.e("yxw", "检查推送服务不存在");
            //启动推送，如果在后台，8.0系统的话会报java.lang.IllegalStateException: Not allowed to start service Intent xxxx app is in background u
            //也就是不能在后台启动服务
            //没关系我们的需求在app界面启动就可以。回到app就会启动咯，
            // todo（待测试，在离线的时候，别的机子发送消息，重新启动测试会重新接受消息，但是不知道是不是100%都可以）
            initLearnCloudPush()
        } else {
//            LogUtils.e("yxw", "检查推送服务存在");
        }
    }

    fun destroy() {
        if (job != null) {
            job?.cancel()
        }
    }
}